#include "common.h"


/* 最长子序列 
 * 比如生成 100个数的随便数组, 按从大到小顺序的子序列的最大长度是多少?
 * 并打印这个最大长度的子序列
 */
int MaxAscSeqInArray(int * array, int arrayLen);



/*
 * 题目：如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中，
 * 则字符串一称之为字符串二的子串。
 *
 * http://www.cnblogs.com/pengyingh/articles/2396427.html
 *
 * 注意，并不要求子串（字符串一）的字符必须连续出现在字符串二中。
 * 请编写一个函数，输入两个字符串，求它们的最长公共子串，并打印出最长公共子串。
 * 例如：输入两个字符串BDCABA和ABCBDAB，字符串BCBA和BDAB都是是它们的最长公共子串，
 * 则输出它们的长度4，并打印任意一个子串。
 */

int LongestCommonSubSequence(const char * src, const char * dest);


// directions of LCS generation
typedef enum decreaseDir {kInit = 0, kLeft, kUp, kLeftUp}decreaseDir ;


// Print a LCS for two strings
// Input: LCS_direction - a 2d matrix which records the direction of 
//                        LCS generation
//        pStr1         - the first string
//        pStr2         - the second string
//        row           - the row index in the matrix LCS_direction
//        col           - the column index in the matrix LCS_direction
void LCS_Print(int **LCS_direction, char* pStr1, char* pStr2, size_t row, size_t col);

// Get the length of two strings' LCSs, and print one of the LCSs
// Input: pStr1         - the first string
//        pStr2         - the second string
// Output: the length of two strings' LCSs
int LCS(char* pStr1, char* pStr2);
